// src/main/modules/ipcHandlers/resourceIpc.js
// 资源管理相关的 IPC 处理程序

// 使用 ES6 import 语法导入 Electron 和服务层
import { ipcMain } from 'electron'
// 假设 ResourceService.js 也已更新为 ES6 模块
import { ResourceService } from '../services/ResourceService'

// 在主进程中创建资源服务实例
// 如果需要在多个 IPC 处理程序间共享状态，保持单例是合理的
const resourceService = new ResourceService()

/**
 * 注册所有资源管理相关的 IPC 处理程序
 * 此函数应在主进程初始化时调用
 */
export function registerResourceIpcHandlers() {
  /**
   * IPC 处理程序: 初始化数据库连接
   * 渲染进程调用: await ipcRenderer.invoke('resource:initializeDatabase', { user, password, host, port, database })
   * @param {any} event - IPC 事件对象
   * @param {Object} config - 数据库配置对象
   * @returns {Promise<{success: boolean, message: string}>} 初始化结果
   */
  ipcMain.handle('resource:initializeDatabase', async (event, config) => {
    try {
      await resourceService.initializeDatabase(config)
      return { success: true, message: '数据库初始化成功' }
    } catch (error) {
      console.error('IPC initializeDatabase error:', error)
      return { success: false, message: error.message }
    }
  })

  /**
   * 扫描目录并生成资源数据
   */
  ipcMain.handle('resource:scanDirectory', async (event, scanPath, host ) => {
    console.log(`收到扫描目录请求: ${scanPath}`)
    try {
      const result = await resourceService.scanDirectoryAndGenerateData(scanPath, host )
      console.log(`扫描完成，发现 ${result.resources.length} 个资源`)
      return result
    } catch (error) {
      console.error('资源扫描失败:', error)
      return {
        resources: [],
        errors: [`资源扫描失败: ${error.message}`]
      }
    }
  })

  /**
   * IPC 处理程序: 保存资源数据到数据库
   * 渲染进程调用: await ipcRenderer.invoke('resource:saveResources', resourcesArray)
   * @param {any} event - IPC 事件对象
   * @param {Array} resources - 要保存的资源数据数组
   * @returns {Promise<{success: boolean, count: number, message: string, errors: Array}>} 保存结果
   */
  ipcMain.handle('resource:saveResources', async (event, resources) => {
    try {
      const result = await resourceService.saveResources(resources)
      return result // { success: true/false, count: ..., message: ..., errors: [...] }
    } catch (error) {
      console.error('IPC saveResources error:', error)
      return { success: false, count: 0, message: error.message, errors: [error.message] }
    }
  })

  // --- 可以在这里添加更多资源管理相关的 IPC 处理程序 ---
}

// 如果需要在其他模块直接访问 resourceService 实例（虽然不常见，但可能有用）
// 可以将其也导出，但通常注册函数就足够了
// export { resourceService };
